# configparser模块
import configparser  # 引入模块

# 类中一个方法 实例化一个对象
config = configparser.ConfigParser()

config["DEFAULT"] = {
    'server_ip': '192.168.200.111',
    'server_port': 3306,
    'save_to_db': True,
    'float': 1.34,
}  # 类似于操作字典的形式

config['db.conf'] = {
    'db_host': '192.168.200.111',
    'db_port': 3306,
    'db_user': 'admin',
    'db_pass': 'adm1n@Ad'
}  # 类似于操作字典的形式

config['topsecret.server.com'] = {'Host Port': '50022', 'ForwardX11': 'no'}
# 将对象写入文件
with open('example.ini', 'w') as configfile:
    config.write(configfile)  # 将对象写入文件

# 查找文件内容,基于字典的形式
# print(config.sections())  # []
# 读取配置
config.read('example.ini', encoding="utf-8")
# 获取所用的section节点
print(config.sections())  # ['db.conf', 'topsecret.server.com']
print('db.host' in config)  # False
print('db.conf' in config)  # True
# 是否存在该section
print(config.has_section("db.conf"))  # True
# 是否存在该option
print(config.has_option("db.conf", "db_host"))  # True
# 获取具体配置
print(config['db.conf']["db_user"])  # admin
print(config['DEFAULT']['server_ip'])  # 192.168.200.111
print(config['topsecret.server.com']['forwardx11'])  # no
print(config['db.conf'])  # <Section: db.conf>
# 注意,有default会默认default的键
for key in config['db.conf']:
    print(key)

# 同for循环,找到'db.conf'下所有键
print(config.options('db.conf'))

# 找到'db.conf'下所有键值对
print(config.items('db.conf'))

# 读取
print(config.get('topsecret.server.com', 'forwardx11'))  # no

# 格式化获取
print(config.getboolean('DEFAULT', 'save_to_db'))  # True
print(config.getint('db.conf', 'db_port'))  # 3306
print(config.getfloat('DEFAULT', 'float'))  # 1.34

# 修改option值，不存在则会创建
# 修改db_port的值为69
config.set("db.conf", "db_port", "69")
config.write(open("example.ini", "w"))

# 添加section和option
# 检查是否存在section
if not config.has_section("redis.conf"):
    config.add_section("redis.conf")
# 检查是否存在该option
if not config.has_option("redis.conf", "host"):
    config.set("redis.conf", "host", "1.1.1.1")
config.write(open("example.ini", "w"))
# 删除section和option
# config.remove_option("redis.conf", 'host')  # 删除option
# config.remove_section("redis.conf") # 整个section下的所有内容都将删除
# 写入文件
config.write(open("example.ini", "w"))
